<?php
 /**
  * Hw Object Factory
  *   
  * @author wenqiang@6rooms.com
  * @version $Id: Factory.class.php,v 1.0 2013/12/3 11:10:03 gaowenqiang Exp $   
  * @package hw
  *
  */
class Hw_Factory {
	/**
	 * 对象集合
	 *
	 * @var array
	 */
	protected static $classes = array();
	
	/**
	 * 获取己创建的所有对象
	 *
	 */
	public static function getClassList()
	{
		return self::$classes;
	}

	/**
	 * 创建对象
	 *
	 * @param string $className 类名
	 * @param mixed $args 初始参数
	 * @return object
	 */
	protected static function createObject($className, $args = null)
	{
		$obj = null;
		if (is_array($args) || strlen($args)) {
			$obj = new $className($args);
		} else {
			$obj = new $className();
		}
		
		return $obj;
	}
	
	/**
	 * 获取对象
	 *
	 * @param string $className 类名
	 * @param mixed $args 初始参数
	 * @param bool $cache 是否从缓存中获取
	 * @return object
	 */
	public static function object($className, $args = null, $cache = true)
	{
		//echo __LINE__ . ' className: ' . $className;
		//echo '<br />';
		if (!strlen($className)) {
			return false;
		}

		$key = strtolower($className);
		if (!$cache || !isset(self::$classes[$key])) {// 从缓存中获取对象
			$obj = self::createObject($className, $args);
			self::$classes[$key] = $obj;
		}

		return self::$classes[$key];
	}

	/**
	 * 获取对象(短类名, 带前辍)
	 *
 	 * @param string $name 短类名
     * @param mixed $args 初始参数
	 * @param string $prefix 类名前辍
	 * @param bool $cache 是否从缓存中获取
	 * @return object
	 */
	public static function getObjectByShortname($name, $args = null, $prefix = null, $cache = true)
	{
		$className = $prefix . $name;
		return self::object($className, $args, $cache);
	}
	
	/**
	 * 获取数据库对象
	 *
 	 * @param string $name 短类名
     * @param mixed $args 初始参数
	 * @param string $prefix 类名前辍
	 * @param bool $cache 是否从缓存中获取
	 * @return object
	 */
	public static function getDb($args = null, $cache = true)
	{
		$className = 'DBHelperi';
		return self::object($className, $args, $cache);	
	}

}
